#define _CRT_SECURE_NO_WARNINGS
//#include<iostream>
//using namespace std;
//const int N = 1e5 + 10;
//typedef long long LL;
//LL f[N];
//int main()
//{
//	int n, m; cin >> n >> m;
//	for (int i = 1; i <=n; i++)
//	{
//		LL x; cin >> x;
//		f[i] += x;
//		f[i + 1] -= x;
//	}
//	while (m--)
//	{
//		LL l, r, k;
//		cin >> l >> r >> k;
//		f[l] += k;
//		f[r + 1] -= k;
//	}
//	for (int i = 1; i <= n; i++)
//	{
//		f[i] += f[i - 1];
//		cout << f[i] << " ";
//	}
//	return 0;
//}
//#include<iostream>
//using namespace std;
//typedef long long LL;
//const int N = 1e5 + 10;
//LL f[N];
//int main()
//{
//	int n, m; cin >> n >> m;
//	int x; cin >> x;
//	for (int i = 2; i <= m; i++)
//	{
//		int y; cin >> y;
//		if (x > y)
//		{
//			f[y]++;
//			f[x]--;
//		}
//		else if (x < y)
//		{
//			f[x]++;
//			f[y]--;
//		}
//		x = y;
//	}
//	for (int i = 1; i <= n; i++) f[i] += f[i - 1];
//	LL ret = 0;
//	for (int i = 1; i <n; i++)
//	{
//		int a,b,c;
//		cin >> a >> b >> c;
//		ret += min(a * f[i], c + b * f[i]);
//	}
//	cout <<ret<< endl;
//	return 0;
//}
//#include<iostream>
//using namespace std;
//const int N = 1e3 + 10;
//typedef long long LL;
//LL f[N][N];
//void insert(int i, int j, int x, int y, int k)
//{
//	f[i][j] += k; f[x + 1][j] -= k; f[i][y + 1] -= k; f[x + 1][y + 1] += k;
//}
//int main()
//{
//	int n, m, q; cin >> n >> m >> q;
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			int x; cin >> x;
//			insert(i, j, i, j, x);
//		}
//	}
//	while (q--)
//	{
//		int x1, y1, x2, y2, k;
//		cin >> x1 >> y1 >> x2 >> y2 >> k;
//		insert(x1, y1, x2, y2, k);
//	}
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + f[i][j];
//			cout << f[i][j] << " ";
//		}
//		cout << endl;
//	}
//	return 0;
//}
//#include<iostream>
//using namespace std;
//const int N = 1e3 + 10;
//int f[N][N];
//int n, m;
//void insert(int x1,int y1,int x2,int y2)
//{
//	f[x1][y1]++;
//	f[x2 + 1][y1]-=1;
//	f[x1][ y2 + 1]--;
//	f[x2 + 1][y2 + 1]++;
//
//}
//int main()
//{
//	cin >> n >> m;
//	while (m--)
//	{
//		int x1, y1, x2, y2;
//		cin >> x1 >> y1 >> x2 >> y2;
//		insert(x1, y1, x2, y2);
//	}
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= n; j++)
//		{
//			f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + f[i][j];
//			cout << f[i][j] << " ";
//		
//		}
//		cout << endl;
//	}
//	return 0;
//}
//#include<iostream>
//#include<queue>
//#include<vector>
//using namespace std;
//typedef long long LL;
//priority_queue<LL, vector<LL>, greater<LL>> p;
//int main()
//{
//	LL n; cin >> n;
//	while (n--)
//	{
//		LL x; cin >> x;
//		p.push(x);
//	}
//	LL sum = 0;
//	while (p.size() > 1)
//	{
//		LL x = p.top(); p.pop();
//		LL y = p.top(); p.pop();
//		sum += (x + y);
//		p.push(x + y);
//	}
//	cout << sum << endl;
//	return 0;
//}
//#include<iostream>
//#include<unordered_map>
//using namespace std;
//const int N = 1e6 + 10;
//int a[N];
//int main()
//{
//	int T; cin >> T;
//	while (T--)
//	{
//		int n; cin >> n;
//		unordered_map<int, int> mp;
//		for (int i = 1; i <= n; i++) cin >> a[i];
//		int left = 1, right = 1, ret = 0;
//		while (right <= n)
//		{
//			mp[a[right]]++;
//			while (mp[a[right]] > 1)
//			{
//				mp[a[left]]--;
//				left++;
//			}
//			ret = max(ret, right - left + 1);
//			right++;
//		}
//		cout << ret << endl;
//	}
//	return 0;
//}
//#include<iostream>
//using namespace std;
//const int M = 2e3 + 10,N=1e6+10;
//int a[N], f[M];
//int main()
//{
//	int n, m; cin >> n >> m;
//	for (int i = 1; i <= n; i++) cin >> a[i];
//	int left = 1, right = 1, ret = n, begin = 1,kind=0;
//	while (right <= n)
//	{
//		if (f[a[right]]++ == 0) kind++;
//		while (kind == m)
//		{
//			if (ret > right - left + 1) {
//				ret = min(ret, right - left + 1);
//				begin = left;
//			}
//			if (f[a[left]]-- == 1) kind--;
//			left++;
//		}
//		right++;
//	}
//	cout << begin << " " << begin + ret - 1 << endl;
//	return 0;
//} 
//#include<iostream>
//using namespace std;
//const int N = 26;
//int mp[N];
//int kind;
//int main()
//{
//	string s;
//	cin >> s;
//	int ret = s.size();
//	for(int left=0,right=0;right<s.size();right++)
//	{
//		if(mp[s[right] - 'a']++ ==0) kind++;
//		while (kind == N)
//		{
//			ret = min(ret, right - left + 1);
//			if (mp[s[left] - 'a']-- == 1)
//			{
//				kind--;
//			}
//			left++;
//		}
//	}
//	cout << ret << endl;
//	return 0;
//}
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int main()
{
	int n,sum=0; cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		sum += a[i];
	}
	int left = 1, right = 1, ret = 0, tmp = 0;
	while (right <= n)
	{
		tmp += a[right];
		if (2 * tmp >= sum)
		{
			ret = max(ret, sum - tmp);
			tmp -= a[left];
			left++;
		}
		ret = max(ret, tmp);
		right++;
	}
	cout << ret << endl;
	return 0;
}